home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / modules / nessus-2.2.8.mo / usr / lib / nessus / plugins / freebsd_package.inc < prev    next >
Text File  |  2005-03-31  |  2KB  |  109 lines

  1. #
  2. # (C) Tenable Network Security
  3. #
  4.  
  5.  
  6.  
  7. function parse_pkg_name(pkg)
  8. {
  9.  local_var elems, num, i, name, version;
  10.  local_var my_pkg;
  11.  
  12.  elems = split(pkg, sep:" ", keep:0);
  13.  num = max_index(elems);
  14.  elems = split(elems[0], sep:"-", keep:0);
  15.  
  16.  name = elems[0];
  17.  
  18.  for ( i = 1 ; i < max_index(elems) - 1 ; i ++ )
  19.  {
  20.  name += "-" + elems[i];
  21.  }
  22.  
  23.  version = split(elems[i], sep:"_", keep:0);
  24.  if ( version[0] == elems[i] ) version = split(elems[i], sep:"p", keep:0);
  25.  if ( version[0] == elems[i] ) version = split(elems[i], sep:",", keep:0);
  26.  
  27.  my_pkg["name"]     = name;
  28.  my_pkg["version"]  = version[0];
  29.  my_pkg["revision"] = version[1];
  30.  
  31.  return my_pkg;
  32. }
  33.  
  34.  
  35. #
  36. # Handle stuff such as "10b"
  37. #
  38. function convert_int(s)
  39. {
  40.  local_var i, ret, flag;
  41.  
  42.  flag = 0;
  43.  
  44.  for ( i = 0; i < strlen(s) ; i ++ )
  45.  {
  46.   if ( ord(s[i]) < ord("0") || ord(s[i]) > ord("9") ) flag = 1;
  47.  }
  48.  
  49.  if ( flag == 0 )
  50.     return int(s);
  51.  
  52.  ret = 0;
  53.  for ( i = 0 ; i < strlen(s) ; i ++ )
  54.  {
  55.   ret *= 36;
  56.   if ( ord(s[i]) >= ord("0") &&
  57.        ord(s[i]) <= ord("9") ) ret += ord(s[i]);
  58.   else
  59.     ret += ord(tolower(s[i])) - ord("a");
  60.  }
  61.  
  62.  return ret;
  63. }
  64.  
  65.  
  66. function vers_cmp(a, b)
  67. {
  68.  local_var array_a, array_b, i, max;
  69.  
  70.  array_a = split(a, sep:".", keep:0);
  71.  array_b = split(b, sep:".", keep:0);
  72.  
  73.  max = max_index(array_a);
  74.  if ( max_index(array_b) > max ) max = max_index(array_b);
  75.  
  76.  for ( i = 0 ; i < max ; i ++ )
  77.  {
  78.   if ( convert_int(s:array_a[i]) != convert_int(s:array_b[i]) )
  79.   {
  80.     return convert_int(s:array_a[i]) - convert_int(s:array_b[i]);
  81.   }
  82.  }
  83.  
  84.  return 0;
  85. }
  86.  
  87.  
  88. function pkg_cmp(pkg, reference)
  89. {
  90.  local_var my_pkg, my_reference, eq;
  91.  
  92.  if ( strlen(pkg) == 0 || strlen(reference) == 0) return 0;
  93.  
  94.  my_pkg = parse_pkg_name(pkg:pkg);
  95.  my_reference = parse_pkg_name(pkg:reference);
  96.  
  97.  eq = vers_cmp(a:my_pkg["version"], b:my_reference["version"]);
  98.  if ( eq ) return eq;
  99.  
  100.  if ( !isnull(my_reference["revision"]) &&
  101.       isnull(my_pkg["revision"])  ) {
  102.     return -1;
  103.     }
  104.  
  105.  eq = vers_cmp(a:my_pkg["revision"], b:my_reference["revision"]);
  106.  return eq; 
  107. }
  108.  
  109.